package com.ten.security.utils;

import com.aliyun.oss.OSS;
import com.aliyun.oss.OSSClientBuilder;
import com.aliyun.oss.internal.OSSHeaders;
import com.aliyun.oss.model.CannedAccessControlList;
import com.aliyun.oss.model.ObjectMetadata;
import com.aliyun.oss.model.StorageClass;
import org.springframework.web.multipart.MultipartFile;
import java.io.IOException;
import java.util.UUID;

/**
 * @author ：Q大侠
 * @date ：Created in 2022/12/15 21:41
 * @description：
 * @modified By：
 * @version:
 */
public class OssUtils {
    /** 
     * @create by:  Q大侠
     * @description: 后台端存储专用 
     * @create time: 2022/12/25 2:06
      * @param file--文件名
     * @return  
     */
    public String ossHou(MultipartFile file){
        return uploadFileAvatar("hou",file);
    }
    /** 
     * @create by:  Q大侠
     * @description: 客户端存储专用 
     * @create time: 2022/12/25 2:06
     * @param file--文件名
     * @return  
     */
    public String ossQian(MultipartFile file){
        return uploadFileAvatar("qian",file);
    }
    /** 
     * @create by:  Q大侠
     * @description: 主要存储操作 
     * @create time: 2022/12/25 2:07
      * @param ossFileName,file -- oss存储到文件名、需要存储的操作的文件名
     * @return  
     */
    public String uploadFileAvatar(String ossFileName,MultipartFile file) {
//oss账号
        // Endpoint以杭州为例，其它Region请按实际情况填写。
        String endpoint = "oss-cn-hangzhou.aliyuncs.com";
        // 阿里云主账号AccessKey拥有所有API的访问权限，风险很高。强烈建议您创建并使用RAM账号进行API访问或日常运维，请登录RAM控制台创建RAM账号。
        String accessKeyId = "LTAI5tHXkiSgYJqK9NoxgFRS";
        String accessKeySecret = "DMyp3gZujMrObBNXB4juNVe7jbOtrO";
        //存储空间名 全剧唯一
        String bucketName = "makabaka4399";
//操作的文件对象
        //上传的操作
        //将文件的名字编程唯一的再上传
        //获取上传的文件的原名
        int i = file.getOriginalFilename().lastIndexOf(".");
        String suffix = file.getOriginalFilename().substring(i);
        //借助  UUID 将文件名编程唯一的 重新定义
        String uuid = UUID.randomUUID().toString();
        //定义上传oss的文件路径
        String datePath = ossFileName;
        String filename = datePath + "/" + uuid + suffix;
        // <yourObjectName>上传文件到OSS时需要指定包含文件后缀在内的完整路径，例如abc/efg/123.jpg。
        String objectName = filename;
//具体操作
        // 创建OSSClient实例。
        OSS ossClient = new OSSClientBuilder().build(endpoint, accessKeyId, accessKeySecret);
        // 上传文件到指定的存储空间（bucketName）并将其保存为指定的文件名称（objectName）。
        try {
            // meta设置请求头
            ObjectMetadata metadata = new ObjectMetadata();
            metadata.setHeader(OSSHeaders.OSS_STORAGE_CLASS, StorageClass.Standard.toString());
            metadata.setObjectAcl(CannedAccessControlList.PublicRead);
            metadata.setContentType("image/jpg");
            //file.getInputStream() 当前文件的输入流
            ossClient.putObject(bucketName, objectName, file.getInputStream(),metadata);
        } catch (IOException e) {
            e.printStackTrace();
        }
        // 关闭OSSClient。
        ossClient.shutdown();
        //生成url
        String url = "https://" + bucketName + "." + endpoint + "/" + filename;
        System.out.println("---++++:"+url);
        if (bucketName!=null&&endpoint!=null&&filename!=null){
            return url;
        }
        return null;
   }
}
